package cn.opopopo.design_pattern_learn.行为型.template;

// 饮品抽象类（模板）
abstract class Beverage {

    // 模板方法（定义算法骨架）→ 通常设为 final
    public final void prepare() {
        boilWater();           // 1. 煮水
        brew();                // 2. 冲泡（由子类实现）
        pourInCup();           // 3. 倒进杯子
        addCondiments();       // 4. 加调料（由子类实现）
    }

    // 具体方法：所有饮品都一样
    private void boilWater() {
        System.out.println("✅ 将水煮沸");
    }

    private void pourInCup() {
        System.out.println("✅ 倒进杯子");
    }

    // 抽象方法：必须由子类实现
    protected abstract void brew();

    protected abstract void addCondiments();

    // 钩子方法（可选）：默认不做事，子类可覆盖
    protected void hook() {
        // 子类可选择性重写
    }
}